home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks95 / NewStuff.sit / New Stuff / NewStuff Installer / NewStuffInit.a < prev    next >
Text File  |  1995-06-23  |  15KB  |  665 lines

  1.  
  2. ;    NewStuffInit.a
  3. ;    by Donald Brown
  4. ;    a Hack that adds a new menu to the Finder 7.5
  5.  
  6. ;    © 1995 CE Software, Inc.  All rights reserved.
  7.  
  8. ;    WHEN    WHO        WHAT
  9.  
  10.             BLANKS        ON
  11.             STRING        ASIS
  12.             PRINT    OFF
  13.             INCLUDE 'QuickEqu.a'
  14.             INCLUDE 'ToolEqu.a'
  15.             INCLUDE 'SysEqu.a'
  16.             INCLUDE 'Traps.a'
  17.             INCLUDE    'Folders.a'
  18.             PRINT    ON
  19.  
  20. PutCodeIn    Main    Entry
  21. InitEntry    BRA    Install
  22.  
  23. StartofInit
  24. jMenuSelect    dc.l    0            ;We must patch MenuSelect
  25. jMenuKey    dc.l    0            ;    and MenuKey
  26. jHFSDisptch    dc.l    0            ;    and HFSDispatch
  27. jSystemTask    dc.l    0            ;    and SystemTask
  28. jAlert        dc.l    0            ;    and Alert
  29. NSMenu        dc.l    0            ;this is our menu.
  30. NSMenuID    dc.w    0            ;this is the ID we wind up using
  31.  
  32. MyName        dcb.b    32,0        ;remember where we are
  33. MyDir        dc.l    0
  34. Myvref        dc.w    0
  35.  
  36. AreWeWatching    dc.w    0    ;set to 1 if we're looking for a create, 2 when we have
  37. Lastvrefnum        dc.w    0
  38. LastDirID        dc.l    0
  39. Lastname        dcb.b    256,0
  40. NameToCopy        dcb.b    256,0
  41.  
  42. NDVref        dc.w    0            ;vrefnum of our folder
  43. NDDir        dc.l    0            ;dirID of our folder
  44. SysFldDir    dc.l    0            ;dirID of the system Folder
  45. NDModDate    dc.l    0
  46.             string    Pascal
  47. NDName        DC.B    'New Documents'
  48.             align    2
  49.             dcb.b    32,0
  50.             string    asis
  51.             string    Pascal
  52. NewMenuText    DC.B    'New'
  53.             align    2
  54.             dcb.b    32,0
  55.             string    asis
  56.             
  57. FromPB        dcb.b    1024,0
  58. ToPB        dcb.b    1024,0
  59. ;
  60. ; UpdateOurMenu finds a folder in the system folder named "New Documents", and
  61. ;    puts the name of each file in the menu
  62. ;
  63. UpdateOurMenu
  64.         link    A6,#-1024
  65.         movem.l    D2-D7/A2-A4,-(SP)
  66.         clr.w    -(SP)                ;find the system folder
  67.         move.w    #kOnSystemDisk,-(SP)
  68.         move.l    #kSystemFolderType,-(SP)
  69.         move.w    #kCreateFolder,-(SP)
  70.         pea        NDVref
  71.         pea        SysFldDir
  72.         _FindFolder
  73.         tst.w    (SP)+
  74. @LookForIt
  75.         lea        -1024(A6),A0        ;Now, let's find the New Documents folder
  76.         lea        NDName,A1
  77.         move.l    A1,ioFileName(A0)
  78.         move.w    NDVref,ioVRefnum(A0)
  79.         move.l    SysFldDir,ioDirID(A0)
  80.         clr.w    ioFDirIndex(A0)
  81.         _GetCatInfo
  82.         beq.s    @DidFind
  83.         lea        -1024(A6),A0        ;Couldn't find it.  Make one.
  84.         lea        NDName,A1
  85.         move.l    A1,ioFileName(A0)
  86.         move.w    NDVref,ioVRefnum(A0)
  87.         move.l    SysFldDir,ioDirID(A0)
  88.         _DirCreate
  89.         bne        @Done
  90.         bra.s    @LookForIt
  91. @DidFind
  92.         lea        NDDir,A1
  93.         move.l    ioDirID(A0),(A1)
  94.         lea        NDModDate,A1
  95.         move.l    ioFlMdDat(A0),A1
  96. @KillLoop        
  97.         clr.w    -(SP)
  98.         move.l    NSMenu,-(SP)        ;if more than two items in the menu, kill one
  99.         _CountMItems
  100.         move.w    (SP)+,D0
  101.         cmp.w    #2,D0
  102.         ble.s    @100
  103.         move.l    NSMenu,-(SP)
  104.         move.w    #3,-(SP)
  105.         _DelMenuItem
  106.         bra.s    @KillLoop
  107.         
  108. @100    moveq    #1,D7
  109. @SearchLoop        
  110.         lea        -1024(A6),A0        ;OK, we've got to get the list of files
  111.         lea        -256(A6),A1
  112.         move.l    A1,ioFileName(A0)
  113.         clr.b    -256(A6)
  114.         move.w    NDVref,ioVRefnum(A0)
  115.         move.l    NDDir,ioDirID(A0)
  116.         move.w    D7,ioFDirIndex(A0)
  117.         _GetCatInfo
  118.         tst.w    D0
  119.         bne.s    @Done
  120.         
  121.         move.l    NSMenu,-(SP)        ;add this name to the menu (even if it has
  122.         pea        NDName                ;characters recognized by AppendMenu, which is why
  123.         _AppendMenu                    ;we're just appending a simple name and then
  124.         clr.w    -(SP)                ;calling SetItem)
  125.         move.l    NSMenu,-(SP)
  126.         _CountMItems
  127.         move.w    (SP)+,D6
  128.         move.l    NSMenu,-(SP)
  129.         move.w    D6,-(SP)
  130.         pea        -256(A6)
  131.         _SetItem
  132.         move.l    NSMenu,-(SP)        ;and let's add control characters
  133.         move.w    D6,-(SP)
  134.         move.w    D7,D0
  135.         add.w    #'0',D0
  136.         move.w    D0,-(SP)
  137.         _SetItemCmd
  138.         
  139.         addq    #1,D7
  140.         bra.s    @SearchLoop
  141.         
  142. @Done
  143.         movem.l    (SP)+, D2-D7/A2-A4
  144.         unlk    A6
  145.         rts
  146. ;
  147. ; Add our items adds the menu to the menu list just before we call MenuSelect/MenuKey
  148. ;
  149. AddUsIn
  150.         move.w    NSMenuID,D0        ;have we added our menu yet?
  151.         tst.w    D0
  152.         beq.s    @MustUpdate
  153.         
  154.         lea        FromPB,A0        ;Now, let's find the New Documents folder
  155.         lea        NDName,A1
  156.         move.l    A1,ioFileName(A0)
  157.         move.w    NDVref,ioVRefnum(A0)
  158.         move.l    SysFldDir,ioDirID(A0)
  159.         clr.w    ioFDirIndex(A0)
  160.         _GetCatInfo
  161.         bne.s    @MustUpdate
  162.         move.l    ioFlMdDat(A0),D0    ;was it modified?
  163.         cmp.l    NDModDate,D0
  164.         beq.s    @MenuWasAdded
  165. @MustUpdate
  166.         bsr        UpdateOurMenu
  167.         
  168. @MenuWasAdded    
  169.         move.l    #10,D7            ;find an empty menu ID
  170. @0        clr.l    -(SP)            ;is this used?
  171.         move.w    D7,-(SP)
  172.         _GetMHandle
  173.         tst.l    (SP)+
  174.         beq.s    @1
  175.         addq    #1,D7            ;nope, try the next number
  176.         bra.s    @0
  177.  
  178. @1        lea        NSMenuID,A0        ;OK, got our empty menu ID.  Save it and set it!
  179.         move.w    D7,(A0)
  180.         move.l    NSMenu,A0
  181.         move.l    (A0),A0
  182.         move.w    NSMenuID,menuID(A0)
  183.         
  184.         clr.l    -(SP)
  185.         move.w    #257,-(SP)        ;Can we find the file menu?
  186.         _GetMHandle
  187.         move.l    (SP)+,D6
  188.         tst.l    D6
  189.         beq.s    @Done
  190.         
  191.         move.l    D6,-(SP)        ;ok, tell it that New now has a hierarchical menu!
  192.         move.w    #1,-(SP)
  193.         move.w    #$1B,-(SP)
  194.         _SetItemCmd
  195.         move.l    D6,-(SP)
  196.         move.w    #1,-(SP)
  197.         move.w    D7,-(SP)
  198.         _SetItmMark
  199.         move.l    D6,-(SP)
  200.         move.w    #1,-(SP)
  201.         pea        NewMenuText
  202.         _SetItem
  203.         
  204.         move.l    NSMenu,-(SP)    ;attach ourselves!
  205.         move.w    #-1,-(SP)
  206.         _InsertMenu
  207.         move.l    NSMenu,A0        ;and fill in our proc
  208.         move.l    (A0),A0
  209.         move.l    D6,A1
  210.         move.l    (A1),A1
  211.         move.l    6(A1),6(A0)        ;the menuproc is 6 bytes in.
  212.         
  213.         move.l    NSMenu,-(SP)
  214.         _CalcMenuSize
  215.         
  216. @Done
  217.         rts
  218.  
  219.  
  220. ;
  221. ; MyMenuSelect.  If we're not in the finder, just call the real trap.  Otherwise,
  222. ;    add our menu if necessary, call the real trap, and handle us if it's us!
  223. ;
  224. MyMenuSelect
  225.         link    A6,#-260
  226.         movem.l    D2-D7/A2-A4,-(SP)
  227.         
  228.         bsr        CheckFinder        ;are we in the finder?
  229.         bne.s    @BailOut
  230.         
  231.         bsr        AddUsIn            ;pur our menus in place
  232.         
  233.         clr.l    -(SP)
  234.         move.l    8(A6),-(SP)
  235.         move.l    jMenuSelect,A0
  236.         jsr        (A0)
  237.         move.l    (SP)+,12(A6)
  238.         
  239.         move.w    NSMenuID,-(SP)    ;remove our menu
  240.         _DeleteMenu
  241.         
  242.         move.w    12(A6),D0        ;was it our menu?
  243.         cmp.w    NSMenuID,D0
  244.         bne.s    @999
  245.         move.w    14(A6),D0        ;find out which one it was
  246.         cmp.w    #1,D0            ;if #1, it's New Folder
  247.         bne.s    @100
  248.         move.l    #$01010001,12(A6)    ;make it the "real" NewFolder
  249.         bra.s    @999
  250.         
  251. @100    move.l    NSMenu,-(SP)    ;yup.  Get the text
  252.         move.w    14(A6),-(SP)    
  253.         pea        NameToCopy
  254.         _GetItem
  255.         lea        AreWeWatching,A0    ;and flag that we want a copy
  256.         move.w    #1,(A0)
  257.         move.l    #$01010001,12(A6)    ;and start the copy by having the finder make a new folder
  258.         
  259. @999    movem.l    (SP)+,D2-D7/A2-A4
  260.         unlk    A6
  261.         move.l    (SP)+,A0
  262.         move.l    (SP)+,D1        ;throw out old param
  263.         jmp        (A0)
  264. @BailOut
  265.         movem.l    (SP)+,D2-D7/A2-A4    ;restore the stack
  266.         unlk    A6
  267.         move.l    jMenuSelect, A1
  268.         jmp        (A1)
  269. ;
  270. ; MyMenuKey.  Just like MyMenuSelect, except uses the keys
  271. ;
  272. MyMenuKey
  273.         link    A6,#-260
  274.         movem.l    D2-D7/A2-A4,-(SP)
  275.         
  276.         bsr        CheckFinder        ;are we in the finder?
  277.         bne.s    @BailOut
  278.         
  279.         bsr        AddUsIn            ;pur our menus in place
  280.         
  281.         clr.l    -(SP)
  282.         move.w    8(A6),-(SP)
  283.         move.l    jMenuKey,A0
  284.         jsr        (A0)
  285.         move.l    (SP)+,10(A6)
  286.         
  287.         move.w    NSMenuID,-(SP)    ;remove our menu
  288.         _DeleteMenu
  289.         
  290.         move.w    10(A6),D0        ;was it our menu?
  291.         cmp.w    NSMenuID,D0
  292.         bne.s    @999
  293.         move.w    12(A6),D0        ;find out which one it was
  294.         cmp.w    #1,D0            ;if #1, it's New Folder
  295.         bne.s    @100
  296.         move.l    #$01010001,10(A6)    ;make it the "real" NewFolder
  297.         bra.s    @999
  298.         
  299. @100    move.l    NSMenu,-(SP)    ;yup.  Get the text
  300.         move.w    12(A6),-(SP)    
  301.         pea        NameToCopy
  302.         _GetItem
  303.         lea        AreWeWatching,A0    ;and flag that we want a copy
  304.         move.w    #1,(A0)
  305.         move.l    #$01010001,10(A6)    ;and start the copy by having the finder make a new folder
  306.         
  307. @999    movem.l    (SP)+,D2-D7/A2-A4
  308.         unlk    A6
  309.         move.l    (SP)+,A0
  310.         move.w    (SP)+,D1        ;throw out old param
  311.         jmp        (A0)
  312. @BailOut
  313.         movem.l    (SP)+,D2-D7/A2-A4    ;restore the stack
  314.         unlk    A6
  315.         move.l    jMenuKey, A1
  316.         jmp        (A1)
  317. ;
  318. ;
  319. ; MyHFSDispatch.  We only want to watch when a new folder is created, and snarf away
  320. ;    away the vrefnum and dirID.
  321. ;
  322. MyHFSDispatch
  323.         link    A6,#-260
  324.         movem.l    D0-D2/A0,-(SP)
  325.         
  326.         cmp.w    #6,D0
  327.         bne.s    @BailOut
  328.         
  329.         lea        AreWeWatching,A1    ;see if we want to store this
  330.         cmpi.w    #1,(A1)
  331.         bne.s    @BailOut
  332.         move.w    ioVrefnum(A0),2(A1)
  333.         move.l    ioDirID(A0),4(A1)
  334.         move.w    #2,(A1)
  335.         move.l    ioFileName(A0),A0
  336.         lea        LastName,A1
  337.         moveq    #32,D0
  338.         _BlockMove
  339.         movem.l    (SP)+,D0-D2/A0    ;restore the stack
  340.         unlk    A6
  341.         move.w    #-1,D0
  342.         move.w    D0,ioResult(A0)
  343.         rts
  344.  
  345. @BailOut
  346.         movem.l    (SP)+,D0-D2/A0    ;restore the stack
  347.         unlk    A6
  348.         move.l    jHFSDisptch, A1
  349.         jmp        (A1)
  350. ;
  351. ; We've patched Alert to hide the Finder's error messages
  352. ;
  353. MyAlert
  354.         lea        AreWeWatching,A1    ;see if we are ready to copy!
  355.         cmpi.w    #2,(A1)
  356.         beq.s    @EatAlert
  357.         
  358.         cmpi.w    #3,(A1)
  359.         bne.s    @900
  360.         clr.w    (A1)
  361.         
  362. @EatAlert
  363.         move.l    (SP)+,A0
  364.         adda.l    #6,SP
  365.         move.w    #1,(SP)                    ;return "OK"
  366.         jmp        (A0)
  367.         
  368. @900    move.l    jAlert,A0
  369.         jmp        (A0)
  370.  
  371. ;
  372. ;
  373. ; MySystemTask.  When we've got a 2 in the watching marker, we delete the folder and
  374. ;    copy the file!
  375. ;
  376. MySystemTask
  377.         link    A6,#-1024
  378.         movem.l    D2-D7/A2-A4,-(SP)
  379.         
  380.         lea        AreWeWatching,A1    ;see if we are ready to copy!
  381.         cmpi.w    #2,(A1)
  382.         bne        @BailOut
  383.         move.w    #3,(A1)                ;OK, do it!
  384.         
  385.         lea        -1024(A6),A0        ;delete the old folder
  386.         lea        LastName,A1
  387.         move.l    A1,ioFileName(A0)
  388.         move.w    Lastvrefnum,ioVrefnum(A0)
  389.         move.l    LastDirID,ioDirID(A0)
  390.         _HDelete
  391.         
  392.         clr.l    D7                    ;make a new file with a new name
  393. @NameLoop
  394.         lea        NameToCopy,A0
  395.         lea        LastName,A1
  396.         moveq    #32,D0
  397.         _BlockMove
  398.         tst.w    D7                    ;is this the first one?
  399.         beq.s    @50
  400.         lea        LastName,A1            ;nope, add the digit
  401.         clr.l    D0
  402.         move.b    (A1),D0
  403.         addq    #1,D0
  404.         move.b    D0,(A1)
  405.         move.b    D7,D1
  406.         add.b    #$30,D1
  407.         move.b    D1,+0(A1,D0.w)
  408. @50        lea        -1024(A6),A0        ;create the new file
  409.         lea        LastName,A1
  410.         move.l    A1,ioFileName(A0)
  411.         move.w    Lastvrefnum,ioVrefnum(A0)
  412.         move.l    LastDirID,ioDirID(A0)
  413.         _HCreate
  414.         cmpi.w    #-48,D0                ;make sure that we didn't have a duplicate
  415.         bne.s    @100
  416.         addq    #1,D7
  417.         bra.s    @NameLoop            ;got a dup.  Try next number
  418.  
  419. @100    
  420.         lea        FromPB,A0        ;Get type and creator of the original
  421.         lea        NameToCopy,A1
  422.         move.l    A1,ioFileName(A0)
  423.         move.w    NDVref,ioVrefnum(A0)
  424.         move.l    NDDir,ioDirID(A0)
  425.         clr.w    ioFDirIndex(A0)
  426.         _HGetFileInfo
  427.         lea        ToPB,A0        ;Set it to the copy
  428.         lea        LastName,A1
  429.         move.l    A1,ioFileName(A0)
  430.         move.w    Lastvrefnum,ioVrefnum(A0)
  431.         move.l    LastDirID,ioDirID(A0)
  432.         clr.w    ioFDirIndex(A0)
  433.         _HGetFileInfo
  434.         lea        ToPB,A0
  435.         lea        LastName,A1
  436.         move.l    A1,ioFileName(A0)
  437.         move.w    Lastvrefnum,ioVrefnum(A0)
  438.         move.l    LastDirID,ioDirID(A0)
  439.         move.l    FromPB+ioFlUsrWds, ioFlUsrWds(A0)    ;copy the type and creator
  440.         move.l    FromPB+ioFlUsrWds+4, ioFlUsrWds+4(A0)    ;copy the type and creator
  441.         move.l    FromPB+ioFlMdDat, ioFlMdDat(A0)    ;copy the modification date
  442.         move.l    FromPB+ioFlCrDat, ioFlCrDat(A0)    ;copy the creation date
  443.         _HSetFileInfo
  444.         
  445.         lea        FromPB,A0        ;OK, open them both to copy!
  446.         lea        NameToCopy,A1
  447.         move.l    A1,ioFileName(A0)
  448.         move.w    NDVref,ioVrefnum(A0)
  449.         move.l    NDDir,ioDirID(A0)
  450.         clr.b    27(A0)
  451.         _HOpen
  452.         lea        ToPB,A0
  453.         lea        LastName,A1
  454.         move.l    A1,ioFileName(A0)
  455.         move.w    Lastvrefnum,ioVrefnum(A0)
  456.         move.l    LastDirID,ioDirID(A0)
  457.         clr.b    27(A0)
  458.         _HOpen
  459.         move.l    FromPB+ioFlLgLen,D7    ;find out how many bytes to copy
  460.         bsr.s    CopyFork
  461.         
  462.         lea        FromPB,A0        ;Now copy the resource fork
  463.         lea        NameToCopy,A1
  464.         move.l    A1,ioFileName(A0)
  465.         move.w    NDVref,ioVrefnum(A0)
  466.         move.l    NDDir,ioDirID(A0)
  467.         clr.b    27(A0)
  468.         _HOpenRF
  469.         lea        ToPB,A0
  470.         lea        LastName,A1
  471.         move.l    A1,ioFileName(A0)
  472.         move.w    Lastvrefnum,ioVrefnum(A0)
  473.         move.l    LastDirID,ioDirID(A0)
  474.         clr.b    27(A0)
  475.         _HOpenRF
  476.         move.l    FromPB+ioFlRLgLen,D7    ;find out how many bytes to copy
  477.         bsr.s    CopyFork
  478.         
  479.         lea        -1024(A6),A0                ;flush the volume!
  480.         clr.l    ioFileName(A0)
  481.         move.w    Lastvrefnum, ioVrefnum(A0)
  482.         _FlushVol
  483.  
  484. @BailOut
  485.         movem.l    (SP)+,D2-D7/A2-A4    ;restore the stack
  486.         unlk    A6
  487.         move.l    jSystemTask, A1
  488.         jmp        (A1)
  489. ;
  490. ; Copy Fork.  We have two paramblocks, in FromPB and ToPB, already open.  The
  491. ;    number of bytes to copy is in D7
  492. ;
  493. CopyFork
  494.         movem.l    D5-D6/A4,-(SP)
  495.         tst.l    D7
  496.         beq.s    @Done
  497.         move.l    D7,D6                ;get a buffer in RAM
  498. @AllocateLoop
  499.         move.l    D6,D0
  500.         _NewPtr
  501.         cmpa.l    #0,A0                ;did we get one?
  502.         bne.s    @GotBuffer
  503.         divu    #2,D6                ;try half that size
  504.         cmp.l    #1024,D6            ;if we couldn't get 1k buffer, give up!
  505.         bgt.s    @AllocateLoop
  506.         bra.s    @Done
  507. @GotBuffer
  508.         move.l    A0,A4                ;save this
  509. @CopyLoop
  510.         move.l    D6,D5                ;copy a buffer's worth
  511.         cmp.l    D5,D7                ;or a partial buffer's worth
  512.         bge.s    @100
  513.         move.l    D7,D5
  514. @100
  515.         lea        FromPB,A0
  516.         move.l    A4,ioBuffer(A0)
  517.         move.l    D5,ioReqCount(A0)
  518.         clr.w    ioPosMode(A0)
  519.         _Read
  520.         lea        ToPB,A0
  521.         move.l    A4,ioBuffer(A0)
  522.         move.l    D5,ioReqCount(A0)
  523.         clr.w    ioPosMode(A0)
  524.         _Write
  525.         sub.l    D5,D7
  526.         cmp.l    #0,D7
  527.         bgt.s    @CopyLoop
  528.         move.l    A4,A0
  529.         _DisposePtr
  530. @Done        
  531.         lea        FromPB,A0
  532.         _Close
  533.         lea        ToPB,A0
  534.         _Close
  535.         movem.l    (SP)+,D5-D6/A4
  536.         rts
  537. ;
  538. ; Check to see if we're in the finder
  539. ;
  540. CheckFinder    
  541.         move.b    CurApName,D0        ;see if it's still INITting
  542.         cmp.b    #$FF,D0
  543.         beq.s    @0
  544.         LEA    CurApName,A0        ;check on FinderName
  545.         move.b    (A0)+,D0        ;set up for _CmpString
  546.         swap    D0
  547.         LEA    FinderName,A1
  548.         move.B    (A1)+,D0
  549.         AndI.L    #$00FF00FF,D0
  550.         _CmpString    ,MARKS
  551.         Cmp.W    #0,D0
  552. @0        RTS
  553. ;
  554. ; Installation code.  Copy our code into the system heap, save the resources, and
  555. ;    quit.
  556. ;
  557. Install        link    A6,#-128
  558.             movem.l    A3,-(SP)
  559.             
  560.             btst    #0,KeyMap+7    ;see if shift key's down
  561.             bne        @999        ;if so, don't install
  562.  
  563.             import    ShowInit
  564.             move.w    #128,-(SP)    ;show our init
  565.             move.w    #-1,-(SP)
  566.             bsr    ShowInit
  567.             
  568.             move.L    #Install-StartofInit,D0
  569.             _NewPtr    ,SYS        ;get a block in the system heap
  570.             move.L    A0,A3        ;save the pointer
  571.             move.L    A0,A1        ;copy stuff over
  572.             LEA    StartofInit,A0
  573.             move.L    #Install-StartofInit,D0
  574.             _BlockMove
  575.             
  576.             clr.l    -(SP)        ;get our handle to the menu
  577.             move.l    #'MENU',-(SP)
  578.             move.w    #10,-(SP)
  579.             _GetResource
  580.             move.l    (SP),NSMenu-StartofInit(A3)
  581.             _DetachResource
  582.             
  583.             clr.l    -(SP)        ;Set our strings
  584.             move.l    #'STR ',-(SP)
  585.             move.w    #10,-(SP)    ;this is the name of the folder with the docs
  586.             _GetResource
  587.             move.l    (SP)+,A0
  588.             move.l    (A0),A0
  589.             lea        NDName-StartofInit(A3),A1
  590.             moveq    #32,D0
  591.             _BlockMove
  592.             clr.l    -(SP)
  593.             move.l    #'STR ',-(SP)
  594.             move.w    #11,-(SP)    ;this is what we change the NewFolder menu item to
  595.             _GetResource
  596.             move.l    (SP)+,A0
  597.             move.l    (A0),A0
  598.             lea        NewMenuText-StartofInit(A3),A1
  599.             moveq    #32,D0
  600.             _BlockMove
  601.             
  602.             move.w    #$13D,D0                        ;patch MenuSelect
  603.             _GetTrapAddress    ,NEWTOOL
  604.             lea        jMenuSelect-StartofInit(A3),A1
  605.             move.l    A0,(A1)
  606.             
  607.             move.w    #$13D,D0
  608.             lea        MyMenuSelect-StartofInit(A3),A0
  609.             _SetTrapAddress    ,NEWTOOL
  610.             
  611.             move.w    #$13E,D0                        ;patch MenuKey
  612.             _GetTrapAddress    ,NEWTOOL
  613.             lea        jMenuKey-StartofInit(A3),A1
  614.             move.l    A0,(A1)
  615.             
  616.             move.w    #$13E,D0
  617.             lea        MyMenuKey-StartofInit(A3),A0
  618.             _SetTrapAddress    ,NEWTOOL
  619.             
  620.             move.w    #$60,D0                        ;patch HFSDispatch
  621.             _GetTrapAddress    ,NEWOS
  622.             lea        jHFSDisptch-StartofInit(A3),A1
  623.             move.l    A0,(A1)
  624.             
  625.             move.w    #$60,D0
  626.             lea        MyHFSDispatch-StartofInit(A3),A0
  627.             _SetTrapAddress    ,NEWOS
  628.             
  629.             move.w    #$1B4,D0                        ;patch SystemTask
  630.             _GetTrapAddress    ,NEWTOOL
  631.             lea        jSystemTask-StartofInit(A3),A1
  632.             move.l    A0,(A1)
  633.             
  634.             move.w    #$1B4,D0
  635.             lea        MySystemTask-StartofInit(A3),A0
  636.             _SetTrapAddress    ,NEWTOOL
  637.             
  638.             move.W    #$185,D0                ;Next is Alert
  639.             _GetTrapAddress    ,NEWTOOL
  640.             lea        jAlert-StartofInit(A3),A1
  641.             move.l    A0,(A1)
  642.             
  643.             move.w    #$185,D0                ;and patch ourselves in!
  644.             LEA        MyAlert-StartofInit(A3),A0
  645.             _SetTrapAddress    ,NEWTOOL
  646.             
  647.             clr.w    -(SP)
  648.             _CurResFile
  649.             lea        -128(A6),A0            ;get the file name and location
  650.             clr.w    ioFCBIndx(A0)
  651.             move.w    (SP)+,ioRefNum(A0)
  652.             lea        MyName-StartofInit(A3),A1
  653.             move.l    A1,ioFileName(A0)
  654.             clr.b    (A1)
  655.             _GetFCBInfo
  656.             lea        MyDir-StartofInit(A3),A1
  657.             move.l    ioFCBParID(A0),(A1)+
  658.             move.w    ioFCBVRefNum(A0),(A1)+
  659.  
  660. @999        movem.l    (SP)+,A3
  661.             unlk    A6
  662.             rts
  663.  
  664.     end
  665.